/**
 * 
 */
package net.sf.jOpinionPoll.controller.questionario;

import net.sf.jOpinionPoll.controller.JOPComparator;
import net.sf.jOpinionPoll.entity.Questionario;

/**
 * @author ericogr
 *
 */
public class QuestionarioComparator extends JOPComparator<Questionario> {
	public static enum Campo {NOME, DATA}
	
	private Campo m_Campo;
	private Campo m_UltimoCampoOrdenado;
	
	public QuestionarioComparator() {
	}
	
	public QuestionarioComparator(Campo campo) {
		setCampo(campo);
	}
	
	public Campo getCampo() {
		return m_Campo;
	}
	
	public void setCampo(Campo campo) {
		m_Campo = campo;
	}
	
	/* (non-Javadoc)
	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
	 */
	@Override
	public int compare(Questionario c1, Questionario c2) {
		boolean inverter = (getCampo() == m_UltimoCampoOrdenado);
		try {
			switch(getCampo()) {
				case NOME:
					return compare(c1.getNome(), c2.getNome(), inverter);
					
				case DATA:
					return compare(c1.getData(), c2.getData(), inverter);
					
				default:
					throw new IllegalStateException("Campo nao pode ser ordenado: " + getCampo());
			}
		}
		finally {
			m_UltimoCampoOrdenado =
				(m_UltimoCampoOrdenado == getCampo() ? null : getCampo());
		}
	}
}